﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.IO;
using Ferreteria.Clases;


namespace Ferreteria
{
    public partial class frmAgregarArticulo : Form
    {
        DisancoEntities context;

        public frmAgregarArticulo()
        {
            InitializeComponent();
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            dgvProveedores.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvProveedores.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            cmbRubros.DataSource = context.Rubros;
            cmbRubros.ValueMember = "rubro_id";
            cmbRubros.DisplayMember = "rubro_nombre";
        }

        private bool verificarExistenciaProveedor(int Proveedor)
        {
            foreach (DataGridViewRow fila in dgvProveedores.Rows)
            {
                if ((int)fila.Cells["id"].Value == Proveedor)
                {
                    return true;
                }
            }
            return false;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            //try
            //{
                if (validar())
                {
                    Articulos nuevo_articulo = new Articulos();

                    nuevo_articulo.art_nombre = txbNombre.Text;
                    nuevo_articulo.categ_id = (int)cmbCategorias.SelectedValue;

                    foreach (DataGridViewRow fila in dgvProveedores.Rows)
                    {
                        var proveedor = new ProveedoresxArticulos();

                        proveedor.prov_id = (int)fila.Cells["id"].Value;
                        proveedor.prov_art_precio = (decimal)fila.Cells["precio"].Value;
                        proveedor.prov_art_bonif = (decimal)fila.Cells["bonificacion"].Value;

                        nuevo_articulo.ProveedoresxArticulos.Add(proveedor);
                    }

                    nuevo_articulo.art_precio_lista = numPrecioLista.Value;
                    nuevo_articulo.art_stock = Convert.ToInt32(numStockActual.Value);
                    nuevo_articulo.art_stock_minimo = Convert.ToInt32(numStockMinimo.Value);
                    nuevo_articulo.art_bonificacion = numBonificacion.Value / 100;
                    nuevo_articulo.art_codigo = txbCodigo.Text;
                    nuevo_articulo.art_precio_oferta = numOferta.Value;
                    if (txbCodigoBarras.Text != "")
                        nuevo_articulo.art_codigobarra = txbCodigoBarras.Text;

                    if (pbImagen.Image != null)
                        nuevo_articulo.art_imagen = Funcion.imageToByteArray(pbImagen.Image, "bmp");

                    if (chkEnableRango.Checked)
                    {
                        nuevo_articulo.art_bonif_fecha_ini = dtpFechaInicio.Value;
                        nuevo_articulo.art_bonif_fecha_fin = dtpFechaFin.Value;
                    }

                    context.Articulos.AddObject(nuevo_articulo);
                    context.SaveChanges();

                    MessageBox.Show("Nuevo articulo agregado correctamente", "Operación exitosa", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
            //}
            //catch (Exception error)
            //{
            //    MessageBox.Show(error.Message);
            //}
        }

        private void cmbRubros_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                cmbCategorias.DataSource = ((Rubros)cmbRubros.SelectedItem).Categorias;
                cmbCategorias.ValueMember = "categ_id";
                cmbCategorias.DisplayMember = "categ_nombre";
            }
            catch
            {
                MessageBox.Show("No se encontraron categorias");
            }
        }

        private void chkFechaIni_CheckedChanged(object sender, EventArgs e)
        {
            dtpFechaInicio.Enabled = chkEnableRango.Checked;
        }

        private bool validar()
        {
            if (txbNombre.Text == "")
            {
                MessageBox.Show("El campo Nombre no puede estar vacio");
                return false;
            }

            if (chkEnableRango.Checked)
            {
                if (dtpFechaInicio.Value.Date > dtpFechaFin.Value.Date)
                {
                    MessageBox.Show("La fecha inicio de la bonificacion no puede ser mayor a la fecha de fin");
                    return false;
                }
            }
            return true;
        }
        
        private void tsbEditar_Click(object sender, EventArgs e)
        {
            DataGridViewRow fila = dgvProveedores.CurrentRow;

            decimal precio = (decimal)fila.Cells["prov_art_precio"].Value;
            decimal bonificacion = (decimal)fila.Cells["prov_art_bonif"].Value;

            Forms.frmEditarPrecioArticulo editarPrecio = new Forms.frmEditarPrecioArticulo(precio, bonificacion);
            DialogResult dr = editarPrecio.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                fila.Cells["prov_art_precio"].Value = editarPrecio.nuevoPrecio;
                fila.Cells["prov_art_bonif"].Value = editarPrecio.nuevaBonificacion;
            }
        }

        private void tsbAgregar_Click(object sender, EventArgs e)
        {
            
            Forms.frmArticuloAgregarProveedor Proveedor = new Forms.frmArticuloAgregarProveedor();
            DialogResult dr = Proveedor.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                if (!verificarExistenciaProveedor(Proveedor.Id))
                {
                    int ind = dgvProveedores.Rows.Add();

                    dgvProveedores.Rows[ind].Cells["id"].Value = Proveedor.Id;
                    dgvProveedores.Rows[ind].Cells["nombre"].Value = Proveedor.Nombre;
                    dgvProveedores.Rows[ind].Cells["precio"].Value = Proveedor.Precio;
                    dgvProveedores.Rows[ind].Cells["bonificacion"].Value = Proveedor.Bonificacion;
                    dgvProveedores.Rows[ind].Cells["precio_final"].Value = Funcion.PrecioBonificado(Proveedor.Precio, Proveedor.Bonificacion);
                }
                else
                {
                    MessageBox.Show("Ese proveedor ya se encuentra en la lista", "Error:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void tsbEliminar_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("¿ Esta Seguro de Borrar el Proveedor del Articulo?", "Disanco Sanitarios", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);

            if (dr == DialogResult.OK)
            {
                var filasEliminar = dgvProveedores.SelectedRows;

                foreach (DataGridViewRow fila in filasEliminar)
                {
                    dgvProveedores.Rows.Remove(fila);
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txbSeleccionarImagen_Click(object sender, EventArgs e)
        {
            DialogResult dr = ofdSeleccionarImagen.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                if (ofdSeleccionarImagen.CheckFileExists)
                {
                    pbImagen.Image = new Bitmap(ofdSeleccionarImagen.FileName);
                }
            }
        }

        private void chkEnableRango_CheckedChanged(object sender, EventArgs e)
        {
            lblFechaFin.Enabled = chkEnableRango.Checked;
            lblFechaInicio.Enabled = chkEnableRango.Checked;
            dtpFechaFin.Enabled = chkEnableRango.Checked;
            dtpFechaInicio.Enabled = chkEnableRango.Checked;
        }

        private void txbBorrarImagen_Click(object sender, EventArgs e)
        {
            pbImagen.Image = null;
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            
        }
    }
}
